"""
保存B站账号 cookie 的脚本

使用方法：
    python save_bilibili_cookie.py          # 保存到默认账号
    python save_bilibili_cookie.py alice    # 保存到 alice 账号
    python save_bilibili_cookie.py bob      # 保存到 bob 账号
"""
import sys
import os

# 添加包路径到 sys.path
package_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if package_root not in sys.path:
    sys.path.insert(0, package_root)

# 设置 cookie 目录
os.environ["BILIBILI_COOKIE_DIR"] = r"D:\bilibili"

# 从命令行参数获取账号名
account = sys.argv[1] if len(sys.argv) > 1 else None

from bilibili.poster import BiliBiliPoster, BilibiliConfig

def save_cookie(account_name=None):
    """登录并保存 cookie"""
    print(f"准备登录B站{'账号: ' + account_name if account_name else '默认账号'}...")
    
    # 创建配置，确保不使用无头模式并设置cookie目录
    config = BilibiliConfig(
        headless=False,
        keep_browser_open=True,
        cookie_dir=os.getenv("BILIBILI_COOKIE_DIR", r"D:\bilibili")  # 明确设置cookie目录
    )
    
    poster = BiliBiliPoster(config=config, account=account_name)
    
    # 调试信息：检查cookie manager是否正确初始化
    if poster._cookie_manager:
        print(f"✓ Cookie管理器已初始化，目录: {poster._cookie_manager.base_dir}")
    else:
        print("❌ Cookie管理器未初始化！")
        return
    
    try:
        # 调用login方法，这会自动打开浏览器
        print("✓ 正在打开浏览器...")
        
        # 等待用户手动登录
        print("等待登录完成（将自动检测登录状态）...")
        is_logged_in = poster.login(max_wait=300)
        
        if is_logged_in:
            print(f"✓ 登录成功！")
            
            # 手动再次保存 cookies 以确保保存
            print("🔄 手动保存 cookies...")
            poster._save_cookies()
            
            # 显示 cookie 文件位置并检查是否真的存在
            if poster._cookie_manager:
                cookie_path = poster._cookie_manager._path_for(account_name)
                print(f"  预期 Cookie 文件路径: {cookie_path}")
                if os.path.exists(cookie_path):
                    file_size = os.path.getsize(cookie_path)
                    print(f"  ✓ Cookie 文件存在，大小: {file_size} 字节")
                else:
                    print(f"  ❌ Cookie 文件不存在!")
        else:
            print("✗ 登录超时或失败")
        
    except Exception as e:
        print(f"✗ 保存失败: {e}")
        import traceback
        traceback.print_exc()
        raise
    finally:
        input("按 Enter 键关闭浏览器...")
        poster.quit()

if __name__ == "__main__":
    save_cookie(account)